import { TODO_ADD, TODO_CHANGEALL, TODO_DEL, TODO_EDIT } from './actionTypes';

export const editAction = (payload) => {
  return { type: TODO_EDIT, payload };
};

//  enf
export const delAction = (payload) => {
  return { type: TODO_DEL, payload };
};

function loadNewTodoAPI() {
  const newTodo = {
    name: '异步返回的任务',
    id: new Date(),
    done: false,
  };
  console.log('开始请求');
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('请求成功，2秒后,数据返回');
      resolve(newTodo);
    }, 2000);
  });
}

/* 
口诀：action 
返回 对象，那么代表是同步操作
返回 函数，那么代表是异步操作
*/
// 如果需要等待异步数据回来，得添加 async,
// 添加了async之后，数据就变成了 promise，不符合action需要对象的要求
export const addAction = (payload) => {
  return async (dispatch) => {
    const res = await loadNewTodoAPI();
    dispatch({ type: TODO_ADD, payload: res });
  };
  // reducer 希望数据是可预测的，那么把id生成放在 reducer之前完成比较好
  // const obj = { id: +new Date(), name: payload, done: false };
  // return { type: TODO_ADD, payload: obj };
};

export const changeAllAction = (payload) => {
  return { type: TODO_CHANGEALL, payload };
};
